home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok70.lha / PL0 / txt / PL0Generator.mod < prev    next >
Text File  |  1993-08-15  |  1KB  |  65 lines

  1. (*************************************************************************
  2.  
  3. :Program.       PL0Generator.mod
  4. :Contents.      Code-Generator for PL0-Complier
  5. :Author.        N. With, ported to Oberon by hartmut Goebel
  6. :Language.      Oberon
  7. :Translator.    Amiga Oberon
  8.  
  9. :Imports.       TextWindows (hartmut Goebel)
  10.  
  11. *************************************************************************)
  12.  
  13. MODULE PL0Generator;
  14.  
  15. IMPORT
  16.   int: PL0Interpreter, NoGuru,
  17.   tw: TextWindows;
  18.  
  19. VAR
  20.   L: INTEGER;
  21.   win: tw.TxtWinPtr;
  22.  
  23. PROCEDURE InitGenerator*;
  24. BEGIN
  25.   L := 0;
  26.   tw.ClrHome(win);
  27. END InitGenerator;
  28.  
  29.  
  30. PROCEDURE Label*(): INTEGER;
  31. BEGIN
  32.   RETURN L;
  33. END Label;
  34.  
  35.  
  36. PROCEDURE Gen*(f: SHORTINT; l,a: INTEGER);
  37. BEGIN
  38.   IF L >= int.maxadr THEN HALT(10); END;
  39.   int.code[L].f := f; int.code[L].l := l; int.code[L].a := a;
  40.   tw.WriteInt(win,L,4);
  41.   tw.WriteString(win,int.mnemonic[f]);
  42.   tw.WriteInt(win,l,4);
  43.   tw.WriteInt(win,a,4);
  44.   tw.WriteLn(win);
  45.   INC(L);
  46. END Gen;
  47.  
  48.  
  49. PROCEDURE fixup*(x:INTEGER);
  50. BEGIN
  51.   int.code[x].a := L;
  52.   tw.WriteString(win,"fixup at");
  53.   tw.WriteInt(win,x,4); tw.WriteLn(win);
  54. END fixup;
  55.  
  56. BEGIN
  57.  win := tw.OpenTextWin("CODE",204,110,204,140);
  58.  IF (win=NIL) THEN HALT(20) END;
  59.  
  60. CLOSE
  61.   IF win # NIL THEN tw.CloseTextWin(win); END;
  62. END PL0Generator.
  63.  
  64.  
  65.